package com.md.model.system;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.md.util.StringUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.util.LinkedHashMap;

/**
 * @author 刘骄阳
 * 2021-11-15 13:51
 */
@Data
@ApiModel("webSocket消息接收")
public class WebSocketMessage {

  /**
   * 历史消息所属id
   */
  @ApiModelProperty("历史消息所属id")
  @JsonFormat(shape = JsonFormat.Shape.STRING)
  private Long id;
  /**
   * 发送者ID
   */
  @ApiModelProperty("发送者ID")
  private String sender;
  /**
   * 接收者ID
   */
  @ApiModelProperty("接收者ID")
  private String recipient;
  /**
   * 消息
   */
  @ApiModelProperty("消息内容")
  private String message;
  /**
   * 状态
   * init:初始化
   * alive:心跳验证
   * message:消息
   * get: 获取数据
   * destroy:销毁
   */
  @ApiModelProperty("消息状态")
  private String status = "message";

  /**
   * 验签内容
   * 规则:
   * json化然后MD5加密
   */
  private String sign;

  /**
   * 是否已读
   * 0: 未读
   * 1: 已读
   */
  @ApiModelProperty("是否已读")
  private Integer areRead = 0;

  @Override
  public String toString() {
    return StringUtil.objectToJson(this);
  }

  /**
   * 校验发送者是否是本人
   *
   * @param senderId 发送者id
   * @return 是否是发送者
   */
  public boolean judgeSender(String senderId) {
    return this.sender == null || !this.sender.equals(senderId);
  }

  /**
   * 验签是否一致
   *
   * @return 是否一致
   */
  public boolean judgeSign() {
    //传递的sign不等于空
    if (StringUtils.isNotBlank(sign)) {
      //equals判断
      return counterSign().equals(sign);
    }
    return false;
  }

  /**
   * 加签
   *
   * @return 加签内容
   */
  public String counterSign() {
    //json化后进行MD5加密
    LinkedHashMap<String, String> map = new LinkedHashMap<>(5);
    map.put("message", message);
    map.put("recipient", recipient);
    map.put("sender", sender);
    map.put("status", status);
//    return EncryptionUtils.md5Encryption(StringUtil.objectToJson(map));
    return null;
  }
}
